home *** CD-ROM | disk | FTP | other *** search
/ Atari Forever 4 / Atari Forever 4.zip / Atari Forever 4.iso / PD_THEMA / EPSON / LQSET / LQSETAC.PAS < prev    next >
Pascal/Delphi Source File  |  1998-03-14  |  18KB  |  527 lines

  1. (*************************************************************************)
  2. (*                                                                       *)
  3. (*  Epson LQ Printer Configurer - Version 1.0                            *)
  4. (*                                                                       *)
  5. (*  Author: Forrest A. Blood IV - 11/24/91                               *)
  6. (*  Based on the original program for a Gemini 10x by G. Moore - 12/4/87 *)
  7. (*                                                                       *)  
  8. (*  This program allows you to configure an Epson LQ in various ways     *)
  9. (*  including "Ultra Tiny" print.  This accessory has been tested on an  *)
  10. (*  LQ-510 and an LQ-570 printer and may not work on other models. The   *)
  11. (*  source code is well documented so you can modify the printer codes   *)
  12. (*  for your specific printer.  You need Personal Pascal Version 2 to    *)
  13. (*  compile this.                                                        *)
  14. (*                                                                       *)
  15. (*  This source code and compiled program are released into the public   *)
  16. (*  domain and may not be sold for profit.                               *)
  17. (*                                                                       *)
  18. (*************************************************************************)
  19.  
  20. {$S10,A+,D-}
  21.  
  22. Program Epson_Acc;
  23.  
  24. {$I GEMSUBS} 
  25. {$I AUXSUBS}
  26.  
  27. VAR ap_id,
  28.     menu_id : Integer ;
  29.     our_name: Str255 ;
  30.  
  31. CONST 
  32.   
  33.  {The following are all CONST defins from the Resource Construction Program}
  34.    PRT_BOX = 0;
  35.    ULTRATNY = 4;
  36.    PICA = 3;
  37.    ELITE = 5;
  38.    CONDENSE = 6;
  39.    PAPER = 17;
  40.    SKIPOVER = 18;
  41.    D_WIDE = 19;
  42.    D_STRIKE = 21;
  43.    ITALICS = 20;
  44.    BOLD = 22;
  45.    FORMFEED = 16;
  46.    TYPERITE = 14;
  47.    LINEFEED = 12;
  48.    DONE = 13;
  49.    INITIAL = 15;
  50.    LEFT = 25;
  51.    RIGHT = 26;
  52.    DOWN = 28;
  53.    LPP = 27;
  54.    UP = 29;
  55.    LFSIZE = 30;
  56.  
  57. TYPE
  58.    stuff = Integer;
  59.  
  60. VAR
  61.  
  62.   {The following capitalized variables represent whether or
  63.    not the indicated button is selected}
  64.  
  65.    PICA_,
  66.    ELITE_,
  67.    CONDENSE_,
  68.    ULTRA_TINY_,
  69.    PAPER_,
  70.    SKIPOVER_,
  71.    D_WIDE_,
  72.    D_STRIKE_,
  73.    ITALICS_,
  74.    BOLD_ : Boolean;
  75.  
  76.    J,
  77.    Choice,
  78.    ToBeEdited,       {Which of the four buttons is to be edited}
  79.    CurLeft,          {Current Left Margin}
  80.    CurRight,         {Current Right Margin}
  81.    CurLPP,           {Current Number of Lines Per Page}
  82.    CurLFS : Integer; {Current Line Feed Size}
  83.  
  84.    Box : Dialog_Ptr;
  85.  
  86.    OutStr : Str255;  {String to send to the printer}
  87.  
  88.    P : File of Text;
  89.  
  90.    TheScreen : Screen_type;
  91.  
  92.    Initial_Draw,          {Has dialog been drawn yet?}
  93.    ChangeSize : Boolean;  {Has size changed (eg from PICA to CONDENSED)}  
  94.  
  95. (****************************************************************)
  96. Function bcostat(device : integer) : boolean;   
  97.    BIOS(8);
  98. (****************************************************************)
  99. Procedure TypeWriter;
  100.  
  101. Begin
  102.   Clear_Screen;
  103.   Curs_Home;
  104.   Curs_On;
  105.   Writeln('Typewriter mode -- type /EX to quit');  
  106.   Writeln;
  107.   Repeat
  108.     Readln(OutStr);
  109.     If (OutStr <> '/EX') and (OutStr <> '/ex') then Writeln(P,OutStr);
  110.   Until (OutStr = '/EX') or (OutStr = '/ex');
  111.   Curs_Off;
  112.   Clear_Screen;
  113. End;
  114. (****************************************************************)
  115. Procedure UpdateNumber(Index,Value:Integer);
  116.  
  117. VAR S : Str255;
  118.     NewValue,
  119.     J, K : Integer;
  120.  
  121. {Gets current resolution:  0 = Low, 1 = Medium, 2 = High}
  122. Function Get_rez:integer;
  123.    XBIOS(4);
  124.  
  125. Begin
  126.     {Convert the integer to a string}
  127.     K := Value div 100;
  128.     If K = 0 then S := ' ' else S := Chr(Ord('0') + K);
  129.     If (Value < 10) then S := '  ' else   
  130.     begin
  131.       Value := Value mod 100;
  132.       K := Value div 10;
  133.       S := concat(S,Chr(Ord('0') + K));
  134.       Value := Value Mod 10;
  135.     end;
  136.     S := concat(S,Chr(Ord('0') + Value));
  137.  
  138.     {Draw string directly to dialog box since Show_Dialog is WAY too slow}    
  139.     Case Index of
  140.       LEFT   : J := 99;
  141.       RIGHT  : J := 115;
  142.       LPP    : J := 131;
  143.       LFSIZE : J := 147;
  144.     end;
  145.  
  146.     If Get_rez = 0 then K := 288 else K := 448;
  147.     If Get_rez = 2 then J := J * 2;
  148.     Draw_Mode(1);
  149.     Draw_String(K,J,S);
  150.  
  151. End;
  152. (****************************************************************)
  153.  
  154. Procedure Event_Loop ;
  155.  
  156. VAR
  157.   event, junk : Integer ;
  158.   mbox, rload : Boolean;
  159.   msg : Message_Buffer ;
  160.  
  161. Begin
  162.   mbox := False;
  163.   rload := Load_Resource('EPSONLQ.RSC');
  164.   WHILE True DO
  165.   Begin
  166.     event := Get_Event( E_Message,0,0,0,0,false,0,0,0,0,false,0,0,0,0,
  167.                 msg,junk,junk,junk,junk,junk,junk );
  168.     If (msg[0] = AC_Open) AND (msg[4] = menu_id) THEN
  169.     If not rload then
  170.     J := Do_Alert('[3][ EPSONLQ.RSC not | found! ][ ABORT ]',1)
  171.     else
  172.     Begin
  173.  
  174.       If NOT mbox then
  175.       begin
  176.         Find_Dialog(PRT_BOX,Box);
  177.         Init_Mouse;
  178.       
  179.         PICA_ := True;
  180.         ELITE_ := False;
  181.         CONDENSE_ := False;
  182.         ULTRA_TINY_ := False;
  183.         PAPER_ := False;
  184.         SKIPOVER_ := False;
  185.         D_WIDE_ := False;
  186.         D_STRIKE_ := False;
  187.         ITALICS_ := False;
  188.         BOLD_ := False;
  189.  
  190.         ToBeEdited := RIGHT;
  191.  
  192.         CurLeft := 0;
  193.         CurRight := 80;
  194.         CurLPP := 66;
  195.         CurLFS := 30;
  196.  
  197.         mbox := True;
  198.         ChangeSize := False;
  199.  
  200.         Obj_SetState(Box,LEFT,Selected | Shadowed,Initial_Draw);  
  201.  
  202.       End;
  203.  
  204.         Initial_Draw := False;
  205.         
  206.         Rewrite(P,'PRN:');
  207.         Center_Dialog(Box);
  208.  
  209.         Repeat
  210.           If PICA_ 
  211.             then Obj_SetState(Box,PICA,(Selected | Shadowed),Initial_Draw)
  212.             else Obj_SetState(Box,PICA,(Shadowed),Initial_Draw);
  213.           
  214.           If ELITE_ 
  215.             then Obj_SetState(Box,ELITE,(Selected | Shadowed),Initial_Draw)
  216.             else Obj_SetState(Box,ELITE,(Shadowed),Initial_Draw);
  217.           
  218.           If CONDENSE_ 
  219.             then Obj_SetState(Box,CONDENSE,(Selected | Shadowed),Initial_Draw)
  220.             else Obj_SetState(Box,CONDENSE,(Shadowed),Initial_Draw);
  221.           
  222.           If ULTRA_TINY_ 
  223.             then Obj_SetState(Box,ULTRATNY,(Selected | Shadowed),Initial_Draw)
  224.             else Obj_SetState(Box,ULTRATNY,(Shadowed),Initial_Draw);
  225.           
  226.           If PAPER_ 
  227.             then Obj_SetState(Box,PAPER,(Selected | Shadowed),Initial_Draw)
  228.             else Obj_SetState(Box,PAPER,(Shadowed),Initial_Draw);
  229.           
  230.           If SKIPOVER_ 
  231.             then Obj_SetState(Box,SKIPOVER,(Selected | Shadowed),Initial_Draw)
  232.             else Obj_SetState(Box,SKIPOVER,(Shadowed),Initial_Draw);
  233.           
  234.           If D_WIDE_ 
  235.             then Obj_SetState(Box,D_WIDE,(Selected | Shadowed),Initial_Draw)
  236.             else Obj_SetState(Box,D_WIDE,(Shadowed),Initial_Draw);
  237.           
  238.           If D_STRIKE_ 
  239.             then Obj_SetState(Box,D_STRIKE,(Selected | Shadowed),Initial_Draw)
  240.             else Obj_SetState(Box,D_STRIKE,(Shadowed),Initial_Draw);
  241.           
  242.           If ITALICS_ 
  243.             then Obj_SetState(Box,ITALICS,(Selected | Shadowed),Initial_Draw)
  244.             else Obj_SetState(Box,ITALICS,(Shadowed),Initial_Draw);
  245.           
  246.           If BOLD_ 
  247.             then Obj_SetState(Box,BOLD,(Selected | Shadowed),Initial_Draw)
  248.             else Obj_SetState(Box,BOLD,(Shadowed),Initial_Draw);
  249.  
  250.           Obj_SetState(Box,LINEFEED,Shadowed,Initial_Draw);  
  251.           Obj_SetState(Box,FORMFEED,Shadowed,Initial_Draw);  
  252.           Obj_SetState(Box,TYPERITE,Shadowed,Initial_Draw);  
  253.           Obj_SetState(Box,INITIAL,Shadowed,Initial_Draw);  
  254.           Obj_SetState(Box,UP,Normal,Initial_Draw);  
  255.           Obj_SetState(Box,DOWN,Normal,Initial_Draw); 
  256.  
  257.           If (not Initial_Draw) then
  258.             begin
  259.             Show_Dialog(Box,0);
  260.             Show_Dialog(Box,1);
  261.             Show_Dialog(Box,7);
  262.             Show_Dialog(Box,23);
  263.             UpdateNumber(LFSIZE,CurLFS);    
  264.             UpdateNumber(LPP,CurLPP);
  265.             UpdateNumber(RIGHT,CurRight);
  266.             UpdateNumber(LEFT,CurLeft);
  267.             end;
  268.               
  269.           Choice := Redo_Dialog(Box,0);
  270.       
  271.           OutStr := '';
  272.  
  273.           Initial_Draw := True;
  274.  
  275.           If (Obj_State(Box,PAPER) & Selected) = 0
  276.             then begin
  277.                    PAPER_ := False;
  278.                    OutStr := Concat(OutStr,#27,#120,#0); {DISABLE LQ Mode}
  279.                  end
  280.             else begin
  281.                    PAPER_ := True;
  282.                    OutStr := Concat(OutStr,#27,#120,#1); {ENABLE LQ Mode}
  283.                  end;           
  284.  
  285.           If (Obj_State(Box,SKIPOVER) & Selected) = 0
  286.           then begin
  287.                    SKIPOVER_ := False;
  288.                    OutStr := Concat(OutStr,#27,#79); {DISABLE PERFORATION SKIPOVER}
  289.                end
  290.             else begin
  291.                    SKIPOVER_ := True;
  292.                    OutStr := Concat(OutStr,#27,#78,#6); {ENABLE PERFORATION SKIPOVER (SKIPS 2 LINES)}
  293.                  end;           
  294.  
  295.           If (Obj_State(Box,D_WIDE) & Selected) = 0
  296.             then begin
  297.                    D_WIDE_ := False;
  298.                    OutStr := Concat(OutStr,#27,'W',#0); {DISABLE DOUBLEWIDE PRINT}
  299.                  end  
  300.             else begin
  301.                    D_WIDE_ := True;
  302.                    OutStr := Concat(OutStr,#27,'W',#1); {ENABLE DOUBLEWIDE PRINT}
  303.                  end;           
  304.  
  305.           If (Obj_State(Box,D_STRIKE) & Selected) = 0
  306.             then begin
  307.                    D_STRIKE_ := False;
  308.                    OutStr := Concat(OutStr,#27,'H'); {DISABLE DOUBLESTRIKE}
  309.                  end  
  310.             else begin
  311.                    D_STRIKE_ := True;
  312.                    OutStr := Concat(OutStr,#27,#71); {ENABLE DOUBLESTRIKE}
  313.                  end;           
  314.  
  315.           If (Obj_State(Box,ITALICS) & Selected) = 0
  316.             then begin
  317.                    ITALICS_ := False;
  318.                    OutStr := Concat(OutStr,#27,#53); {DISABLE ITALICS}
  319.                  end  
  320.             else begin
  321.                    ITALICS_ := True;
  322.                    OutStr := Concat(OutStr,#27,#52); {ENABLE ITALICS}
  323.                  end;           
  324.  
  325.           If (Obj_State(Box,BOLD) & Selected) = 0
  326.             then begin
  327.                    BOLD_ := False;
  328.                    OutStr := Concat(OutStr,#27,#70); {DISABLE EMPHASIZED (BOLD) PRINT}
  329.                  end  
  330.             else begin
  331.                    BOLD_ := True;
  332.                    OutStr := Concat(OutStr,#27,#69); {ENABLE EMPHASIZED PRINT}
  333.                  end;           
  334.  
  335.           If (Obj_State(Box,PICA) & Selected) = 0
  336.             then PICA_ := False
  337.             else begin
  338.                    If not PICA_ then ChangeSize := True;
  339.                    PICA_ := True;
  340.                    OutStr := Concat(OutStr,#27,#80); {SELECT PICA (10 CPI)}
  341.                  end;           
  342.  
  343.           If (Obj_State(Box,ELITE) & Selected) = 0
  344.             then ELITE_ := False
  345.             else begin
  346.                    If not ELITE_ then ChangeSize := True;
  347.                    ELITE_ := True;
  348.                    OutStr := Concat(OutStr,#27,#77); {SELECT ELITE (12 CPI)}
  349.                  end;           
  350.  
  351.           If (Obj_State(Box,CONDENSE) & Selected) = 0
  352.             then CONDENSE_ := False
  353.             else begin
  354.                    If not CONDENSE_ then ChangeSize := True;
  355.                    CONDENSE_ := True;
  356.                    OutStr := Concat(OutStr,#27,#103); {SELECT CONDENSED PRINT (17 CPI)}
  357.                  end;           
  358.  
  359.           If (Obj_State(Box,ULTRATNY) & Selected) = 0
  360.             then begin
  361.                    ULTRA_TINY_ := False;
  362.                    OutStr := Concat(OutStr,#27,#84); {CANCEL SUBSCRIPT MODE}
  363.                    If not D_STRIKE_ then OutStr := Concat(OutStr,#27,'H'); {CANCEL DOUBLE STRIKE}
  364.                  end  
  365.             else begin
  366.                    If not ULTRA_TINY_ then ChangeSize := True;
  367.                    ULTRA_TINY_ := True;
  368.                    OutStr := Concat(OutStr,#27,#83,#0,#15); {SELECT SUPERSCRIPT MODE & CONDENSED}
  369.                    D_STRIKE_ := True;
  370.                  end;           
  371.                   
  372.           If ChangeSize then
  373.           begin
  374.             CurLeft := 0;
  375.             UpdateNumber(LEFT,CurLeft);
  376.           end;  
  377.           
  378.           If ULTRA_TINY_ and ChangeSize then
  379.           begin
  380.             CurLFS := 17;
  381.             UpdateNumber(LFSIZE,CurLFS);    
  382.             CurLPP := 122;
  383.             UpdateNumber(LPP,CurLPP);
  384.             CurRight := 136;
  385.             UpdateNumber(RIGHT,CurRight);
  386.           end;    
  387.     
  388.           If (not ULTRA_TINY_) and ChangeSize then
  389.           begin
  390.             CurLFS := 30;
  391.             UpdateNumber(LFSIZE,CurLFS);    
  392.             CurLPP := 66;
  393.             UpdateNumber(LPP,CurLPP);
  394.             If PICA_ then CurRight := 80;
  395.             If ELITE_ then CurRight := 96;
  396.             If CONDENSE_ then CurRight := 120;
  397.             UpdateNumber(RIGHT,CurRight);
  398.           end;
  399.  
  400.           ChangeSize := False;
  401.  
  402.           If (Obj_State(Box,LEFT) & Selected) <> 0 then ToBeEdited := LEFT;        
  403.           If (Obj_State(Box,RIGHT) & Selected) <> 0 then ToBeEdited := RIGHT;        
  404.           If (Obj_State(Box,LPP) & Selected) <> 0 then ToBeEdited := LPP;        
  405.           If (Obj_State(Box,LFSIZE) & Selected) <> 0 then ToBeEdited := LFSIZE;        
  406.  
  407.           J := 0;
  408.           If (Obj_State(Box,UP) & Selected) <> 0 then J := 1;        
  409.           If (Obj_State(Box,DOWN) & Selected) <> 0 then J := -1;        
  410.               
  411.           Case ToBeEdited of
  412.             LEFT : If (CurLeft + J > -1) and (CurLeft + J < 136) then
  413.                    Begin
  414.                      CurLeft := CurLeft + J;
  415.                      UpdateNumber(LEFT,CurLeft);
  416.                    End;
  417.             RIGHT : If (CurRight + J > 0) and (CurRight + J < 137) then
  418.                     Begin
  419.                       CurRight := CurRight + J;
  420.                       UpdateNumber(RIGHT,CurRight);
  421.                     End;
  422.             LPP : If (CurLPP + J > 0) and (CurLPP + J < 128) then
  423.                   Begin
  424.                     CurLPP := CurLPP + J;
  425.                     UpdateNumber(LPP,CurLPP);
  426.                   End;
  427.             LFSIZE : If (CurLFS + J > 0) and (CurLFS + J < 256) then
  428.                      Begin
  429.                        CurLFS := CurLFS + J;
  430.                        UpdateNumber(LFSIZE,CurLFS);
  431.                      End;
  432.           end; {CASE}
  433.  
  434.           OutStr := Concat(OutStr,#27,#108,Chr(CurLeft));  {SET LEFT MARGIN}
  435.           OutStr := Concat(OutStr,#27,#81,Chr(CurRight)); {SET RIGHT MARGIN}
  436.           OutStr := Concat(OutStr,#27,#67,Chr(CurLPP));   {SET LINES PER PAGE} 
  437.           OutStr := Concat(OutStr,#27,#51,Chr(CurLFS));   {SET LINE FEED SIZE in 1/180" INCREMENTS}
  438.  
  439.           If (Obj_State(Box,LINEFEED) & Selected) <> 0
  440.             then OutStr := Concat(OutStr,#10); {SEND LINEFEED}
  441.  
  442.           If (Obj_State(Box,FORMFEED) & Selected) <> 0
  443.             then OutStr := Concat(OutStr,#12);  {SEND FORMFEED}
  444.   
  445.           If Choice = INITIAL then    
  446.           Begin
  447.             PICA_ := True;
  448.             ELITE_ := False;
  449.             CONDENSE_ := False;
  450.             ULTRA_TINY_ := False;
  451.             PAPER_ := False;
  452.             SKIPOVER_ := False;
  453.             D_WIDE_ := False;
  454.             D_STRIKE_ := False;
  455.             ITALICS_ := False;
  456.             BOLD_ := False;
  457.  
  458.             CurLFS := 30;
  459.             UpdateNumber(LFSIZE,CurLFS);    
  460.             CurLPP := 66;
  461.             UpdateNumber(LPP,CurLPP);
  462.             CurRight := 80;
  463.             UpdateNumber(RIGHT,CurRight);
  464.             CurLeft := 0;
  465.             UpdateNumber(LEFT,CurLeft);
  466.  
  467.             OutStr := Concat(#27,#64);  {CODE TO INITIALIZE PRINTER TO POWER UP STATE}         
  468.           End;
  469.  
  470.           If bcostat(0) then
  471.             Write(P,OutStr) {Send OutStr to the printer!}
  472.           else
  473.           Begin
  474.             J := do_alert('[3][ Printer is not | responding! ][ Abort ]',1);
  475.  
  476.             PICA_ := True;
  477.             ELITE_ := False;
  478.             CONDENSE_ := False;
  479.             ULTRA_TINY_ := False;
  480.             PAPER_ := False;
  481.             SKIPOVER_ := False;
  482.             D_WIDE_ := False;
  483.             D_STRIKE_ := False;
  484.             ITALICS_ := False;
  485.             BOLD_ := False;
  486.  
  487.             CurLFS := 30;
  488.             UpdateNumber(LFSIZE,CurLFS);    
  489.             CurLPP := 66;
  490.             UpdateNumber(LPP,CurLPP);
  491.             CurRight := 80;
  492.             UpdateNumber(RIGHT,CurRight);
  493.             CurLeft := 0;
  494.             UpdateNumber(LEFT,CurLeft);
  495.  
  496.             Choice := Done;
  497.           End;
  498.                   
  499.           If Choice = TYPERITE then
  500.            Begin
  501.             Hide_Mouse;
  502.             Save_Scrn(TheScreen);
  503.             TypeWriter;
  504.             Restr_Scrn(TheScreen);
  505.             Show_Mouse;
  506.           End;
  507.         Until Choice = Done;        
  508.         Obj_SetState( Box, Done, Shadowed, True);
  509.         ReWrite (P, 'CON:');
  510.         End_Dialog ( Box );
  511.         END
  512.       END
  513.     END;
  514.  
  515. BEGIN
  516.   ap_id := Init_Gem ;
  517.   IF ap_id >= 0 THEN
  518.     BEGIN
  519.       our_name := '  Set Epson LQ';
  520.       menu_id := Menu_Register( ap_id, our_name );
  521.       Event_Loop ;
  522.     END 
  523. END.
  524.  
  525.  
  526.  
  527.